#include <iostream>
using namespace std;
// 这里会发现下面的程序会崩溃掉？这里就需要我们以后讲的深拷贝去解决。
typedef int DataType;
class Stack
{
public:
    Stack(int capacity = 10)
    {
        _array = (DataType *)malloc(capacity * sizeof(DataType));
        if (nullptr == _array)
        {
            perror("malloc申请空间失败");
            return;
        }
        _size = 0;
        _capacity = capacity;
    }
    void Push(const DataType &data)
    {
        // CheckCapacity();
        _array[_size] = data;
        _size++;
    }
    // s2(s1)
    Stack(const Stack &s)
    {
        _array = (DataType *)malloc(s._capacity * sizeof(DataType));
        if (nullptr == _array)
        {
            perror("malloc申请空间失败");
            return;
        }
        memcpy(_array, s._array, sizeof(DataType) * s._size);
        _capacity = s._capacity;
        _size = s._size;
    }
    ~Stack()
    {
        if (_array)
        {
            free(_array);
            _array = nullptr;
            _capacity = 0;
            _size = 0;
        }
    }

private:
    DataType *_array;
    int _size;
    int _capacity;
};
int main()
{
    //使用默认的拷贝构造函数就崩溃、
    //需要自己写一个拷贝构造函数
    Stack s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    Stack s2(s1);
    return 0;
}